package tech.aistar.corejava.day13;

import java.io.File;
import java.io.IOException;

/**
 * @Author: lya
 * @Description: 本类的作用描述:
 * @CreateDate: 2019/8/1
 * @Version: 1.0
 */
public class FileDemo {
    public static void main(String[] args) {
        //判断文件还是目录,就是通过File构造的pathname
        //createFile("file2.txt");
        createFile("D:/file.txt");
        createFile("src/tech/aistar/");
        delFileOrNullFolder("file2.txt");
    }

    private static void createFile(String s) {
        //1. 构建一个File实例
        File file = new File(s);//文件的实例

        //boolean createNewFile();
        try {
            if (file.createNewFile()){//创建文件,如果文件已经存在,则创建失败!
                System.out.println("创建文件成功!");
            }else{
                System.out.println("创建文件失败!");
            }
        } catch (IOException e) {//构建的pathname中的目录不存在
            e.printStackTrace();
        }

        //判断文件是否存在
        if(file.exists()){
            try {
                if(!file.createNewFile()){//创建文件,如果文件已经存在则创建失败!
                    System.out.println("创建文件成功!");

                    //获取文件的名称[包含后缀]
                    System.out.println("文件名称:"+file.getName());

                    //D:\LearningTools\workspaces\IDEA workspace\file2.txt
                    System.out.println("文件的绝对路径:"+file.getAbsolutePath());
                    //D:\LearningTools\workspaces\IDEA workspace\file2.txt
                    System.out.println(file.getAbsoluteFile());

                    //file2.txt
                    System.out.println("构造中传入的路径:"+file.getPath());

                    System.out.println(file.length());//0

                    System.out.println("文件的父目录(相对的:" + file.getParent());//null

                    System.out.println(file);//相对路径     file2.txt
                }else{
                    System.out.println("创建文件失败!");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else{
            System.out.println("文件已经存在!");
        }
    }
    /**
     * 创建目录(文件夹)
     * @param pathname
     */
    public static void createFolder(String pathname){
        //1. 构建一个File实例
        File file = new File(pathname);//目录的实例

        //2.判断目录是否存在
        if(file.exists()){
            //1. boolean mkdir();//创建单层次的目录
            //2. boolean mkdirs();//可以连续创建深层次的目录

            //希望目录的file 实例才能去调用mkdir方法
            //判断file是否为目录的实例

            //boolean isDirectory();//判断是否为目录
            //boolean is.File();//判断是否为文件

            //判断file是否目录的实例
            if(file.mkdirs()){
                //获取信息
                System.out.println("目录名称:"+file.getName());
                System.out.println(file+"目录,创建成功!");

            }else{
                System.out.println("目录创建失败");

            }
        }else{
            System.out.println("已经存在了!");
        }
    }
    /**
     * 列举某个目录下的第一层的内容
     * 如果是文件 - 则只需要输出文件的名称
     * 如果是目录 - 则需要输出目录的绝对路径
     * @param pathname 目录的路径
     */
    public static void listFolder(String pathname){
        //1. 利用目录路径构建一个file实例
        File file = new File(pathname);

        //2.判断file是否存在
        if (file.exists()){

            //3. 判断是否为目录
            if(file.isDirectory()){

                //4.返回的是file实例对应的第一层的所有的file数组
                File[] files= file.listFiles();

                //5.确认第一层有内容
                if(null != files && files.length > 0){
                    for (File f : files) {
                        if(f.isFile()){
                            //如果是文件 - 输出名称
                            System.out.println(f.getName());
                        }else if(f.isDirectory()){
                            //如果是目录 - 输出绝对路径
                            System.out.println(f.getAbsolutePath());
                        }
                    }
                }
            }else{
                System.out.println("不是一个目录路径!");
            }
        }else{
            System.out.println(file+"不存在");
        }
    }
    /**
     * boolean delete();//1. 直接删除文件  2.直接删除空目录
     *                  //3. 如果是一个非空目录,则删除失败
     * @param pathname
     */
    public static void delFileOrNullFolder(String pathname){
        File file = new File(pathname);

        //判断file是否存在
        if(file.exists()){
            if(file.delete()){
                System.out.println(file+"删除成功!");
            }else{
                System.out.println("删除失败!");
            }
        }else{
            System.out.println("不存在");
        }

    }
}
